iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0

今天來用 Grafana 的內建功能 Alerting 來做 Alert
來解決服務下線或負載異常 或惡搞 Alert 來 On call 同事 的狀況沒有人知道

Alert Rules

Alert Rule 是 Alert Manager 內用來制定 Alert 的觸發條件的
能夠透過 Prometheus 的 Metric 和 Loki 的 Log 來當指標作為觸發條件
這次透過 Probe_Success Metric 的 Kubeadm Control Plane Health Check 來測試
廢話不多說馬上到 Grafana 網頁上透過左側的列表來找到 Alerting -> Alert Rules
https://ithelp.ithome.com.tw/upload/images/20231013/20162773Cqoj1D9EHK.png
接著按 New Alert Rule
https://ithelp.ithome.com.tw/upload/images/20231013/20162773ojg13bG4lr.png
接著先設定 Alert Rule Name 還有條件
這邊選擇 Probe_Success 為 Metric
再透過 Label 來篩選要抓的 Instance 這邊指定 lke-main.ironman.test
設定完就可以右邊的 Run queries 來先找找看這個 Metric 的值
https://ithelp.ithome.com.tw/upload/images/20231013/20162773OkpyN0RnlU.png
可以看到除了抓出了 Metric 的值 也在下方更新了兩種 Alert 的 Condition
這邊要用 C 的 Threshold 來做為主要的 Condition
這邊來設定條件為低於 1 時 因 Probe_Success 值為 0 的時候就是 Blockbox Exporter 探測不到 Target 的值
也就是說 Kubeadm 的 Control Plane 死了需要有人去救他
在條件的部分大致上是這樣 接下來設定存放 Role 的資料夾和設定探測時間和維持時間
https://ithelp.ithome.com.tw/upload/images/20231013/20162773a2bjXaZWLY.png
資料夾的部分建一個存放 Alert 且分類是 Health Check 的資料夾來放
Evaluation group 是探測時間 在一個群組內設定共通的時間來進行探測
Pending period 是維持時間 就是在探測後條件觸發 需要維持多久的時間才會發送 Alert 到 Contact Point 上
這邊我的設定是

  • Evaluation group 1m
  • Pending period 1m

基本上設定完這些後就可以儲存了 按右上角的 Save Rule and exit 離開

Contact Point

Contact Point 是設定 Grafana 的通知管道也就是 Grafana 可以透過哪些管道來通知使用者
可以選擇 E-Mail Slack Line Teams ... 等一大堆軟體
但這次就用最簡單也蝦趴的 Discord 來做看看

Discord Setting

先開一個要使用的伺服器起來 接著對伺服器內的頻道按右鍵 按下編輯頻道
https://ithelp.ithome.com.tw/upload/images/20231013/20162773nhZgjrxOdc.png
按進整合 再點建立 Webhook
https://ithelp.ithome.com.tw/upload/images/20231013/20162773pMHAyQr7Zx.png
建立後再按下複製 Webhook 網址 等等要透過這個 Webhook 網址
https://ithelp.ithome.com.tw/upload/images/20231013/20162773lO4s4nQ13A.png

Grafana Setting

從左側選單打開 Alerting -> Contact Points
https://ithelp.ithome.com.tw/upload/images/20231013/201627730i30bjeNeG.png
進來後再按下 Add Contact Point 新增剛剛設定的 Discord 進來設定
https://ithelp.ithome.com.tw/upload/images/20231013/20162773iif0fMzyP0.png
把剛剛的 Webhook 網址貼上來就可以了 可以透過右邊的 Test 來讓 Grafana 發一個測試用的 POST 到 Webhook上
https://ithelp.ithome.com.tw/upload/images/20231013/20162773bNK6Oz6fs5.png

Notification Polices

一樣透過左側選單 Alerting -> Notification Polices
https://ithelp.ithome.com.tw/upload/images/20231013/20162773NjQz9PgQiH.png
接著這邊改一下預設的 Policy 就可以了
預設的 E-Mail 因為沒有設定 SMTP 所以是無法使用的
所以改成剛剛設定好的 Discord Webhook 來做使用
https://ithelp.ithome.com.tw/upload/images/20231013/201627739KXZgmB64p.png
https://ithelp.ithome.com.tw/upload/images/20231013/201627731AiyNKsB31.png

這樣子就設定好所有東西了 接著來測試

Testing Alert

我的測試方式是在 kubeadm 的 Control plane 上透過 IPTABLES 來設定防火牆擋掉 Prometheus 的探測
這樣子 Probe_Success 的 Metric 值就會由 1 降為 0 去觸發 Alert Role
再等到等待時間滿了後就會發送 Alert 到 Discord 上

這邊是 IPTABLES 使用的指令 針對 Prometheus 的 IP 擋住 Control Plane 的 Port

root@lke-main:~# iptables -A INPUT -s 10.0.0.5 -p tcp  --dport  6443 -j DROP

接著來看看發生什麼事
這邊是 IPTABLES 設定後幾秒的狀態 可以看到 Alert Role 已經在 Pending 了
https://ithelp.ithome.com.tw/upload/images/20231013/2016277350PuARV18N.png
這是過了1分鐘 也就是等待時間滿後發出 Alert 的狀態
https://ithelp.ithome.com.tw/upload/images/20231013/20162773b3sD0EQOhU.png
這邊是 Discord 看到的狀態截圖
https://ithelp.ithome.com.tw/upload/images/20231013/201627731i8hjGwIUQ.png
測試完後再透過指令把 IPTABLES 剛剛加上去的防火牆拔掉就可以還原了

root@lke-main:~# iptables -D INPUT -s 10.0.0.5 -p tcp  --dport  6443 -j DROP

恢復正常後 Grafana 會再寄一個恢復的訊息過來長這樣
https://ithelp.ithome.com.tw/upload/images/20231014/20162773po8qSOcUlP.png


上一篇
Day27 SFTPGO 建立簡單的 Pipeline 來處理檔案吧
下一篇
DAY29 該如何應用雲原生來建置環境?
系列文
地端建置大雜燴-下從網路線上到Grafana的建置之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言